iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 9
1
Software Development

後端新手 使用laravel 從零開始 到開出api系列 第 9

Day9 先別急著寫code,專案開始前的設計

  • 分享至 

  • xImage
  •  

Day9 先別急著寫code,專案開始前的設計

前面介紹了那麼多東西,我認為差不多可以開始做個專案了,這次要做的主題是

  • Todolist

簡單講就是一個任務列表。題目很簡單,但是包含了資料庫的操作(CRUD),而且之後還可以做出很多延伸,例如加上登入功能或是每個任務都有詳細註解等等,總之,對新手來說,這是個好題目。

我們回到主題,該怎麼開始寫專案呢,先別急著寫code,先考慮好你的需求,設計好資料表再開始寫code。

我個人習慣開始coding前,會先離開電腦,找張白紙將我腦中所想的架構畫出來。整理出架構後,開始設計table,你的資料要如何變成一張資料表,並且每個資料表要如何關聯,先想好後,再開始寫code。

小弟我現在在好想工作室,目前有跟IOS學員合作做專案,我們的想法是想做出簡化版的trello,ios學員做前端,我負責做後端。而這東西說白了,其實也就是高級版的Todolist。而我打算將這個專案引用到鐵人賽,我會先從這個專案的骨架做起,並且先開出api文件,有多餘的篇服會再慢慢新增其他功能。

列出需求

Todolist的功能,我會先從基本款做起。快速的開出api後,將api文件交給前端,再慢慢新增其他api。這樣才不會讓前端等你很久,前端拿到api後有什麼問題也可以先反應給你,先列出這些功能吧:

  1. 列出所有task
  2. 新增task
  3. 更新task
  4. 刪除task
  5. 登入
  6. 註冊

我的目的是開出api,這些功能成功後都是回傳json格式的資料給對方,我們不需要管前端頁面怎麼切換,怎麼顯示,我們就是負責資料庫的CRUD就可以了。

再來可以決定一下功能,例如登入功能:

  1. 登入後會給前端一組亂數的token,前端要使用CRUD必須在request帶上token
  2. 使用者登入後只能對自己的task CRUD

設計資料表

我的話會先列出必須存到資料庫的資料

例如task資料有:

  1. title
  2. status
  3. create_user
  4. update_user
  5. create_time
  6. update_time

可能還有更多,總之先決定好資料表的內容吧。

再來設計資料表需要一定的正規化。例如你可以將使用者資料和task資料分開成兩張表。可以避免資料的重複性,使用其來會比較方便。

資料表正規化

正規化是為了解決資了表重複的部份,將資料表拆開,並建立資料表之間的關聯性。正規化分為好幾個等級,看你要使用到哪個層級。
正規化聽起來好像很複雜,我們先不深入探討,簡單講解。
我們可以將資料表分為一對一(one to one)、一對多(one to many)及多對多(many to many),的關係。

資料表之間有重複的地方,我們可以將其分開併建立關聯,一對一的話要不要分就看個人,主要分的是一對多以及多對多。

那我們該如何知道資料的關聯性是哪種呢?
我這邊有個簡單的分類法

以這個專案為例
我們知道一個使用者有多個Task,那我們就可以把資料表分成

  1. user
  2. task

而一個task若沒有多個user,那user跟task就是個一對多的關係
若是有,那就是多對多的關係。

很簡單吧,而設置關聯式資料表,需要設定外鍵(foreign key)。已一對多為例,一個user有多個task,要將task表關聯到user。而laravel有好用的migration功能,可以快速的幫你建立好資料表,詳細的設定我下次會介紹,敬請期待。


上一篇
Day8 laravel controller 基礎用法
下一篇
Day10 使用laravel migration功能 讓你快速佈署資料庫! 上篇
系列文
後端新手 使用laravel 從零開始 到開出api30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言